# -*- coding:utf-8 -*-
import re
import scrapy
from mySpider.items import MyspiderItem

# 针对页面老师的信息，使用beautifulsoup4进行标签格式化后，抽取即可.'pip3 install beautifulsoup4'


"""
#### 普通方式，非管道方式.
class SpecialspiderSpider(scrapy.Spider):
    # 爬虫名称
    name = 'specialSpider'

    # 限定爬虫获取的连接域名，超出该域名，则舍弃超出域名的连接.
    allowed_domains = ['itcast.cn']

    # 给定一个初始连接，开始进行连接的获取.
    start_urls = ["http://www.itcast.cn/channel/teacher.shtml",]

    # 设置解析网页的格式/方法.
    def parse(self, response):

        # 定义一个列表，保存爬取老师的信息.
        items = []

        for each in response.xpath("//div[@class='li_txt']"):

            # 将我们得到的数据封装到一个 `ItcastItem` 对象
            item = MyspiderItem()

            # extract()方法返回的都是unicode字符串.
            name = each.xpath("h3/text()").extract()
            level = each.xpath("h4/text()").extract()
            info = each.xpath("p/text()").extract()

            #x path返回的是包含一个元素的列表.
            item['name'] = name[0]
            item['level'] = level[0]
            item['info'] = info[0]

            items.append(item)

        # 直接返回最后数据
        return items
"""


# 管道方式实现
class SpecialspiderSpider(scrapy.Spider):
    # 爬虫名称
    name = 'specialSpider'

    # 限定爬虫获取的连接域名，超出该域名，则舍弃超出域名的连接.
    allowed_domains = ['itcast.cn']

    # 给定一个初始连接，开始进行连接的获取.
    start_urls = ["http://www.itcast.cn/channel/teacher.shtml", ]

    # 一种清理制表符，空白符，换行符的方法.
    def clean_spaces(self, main_string):
        main_string = main_string.replace('\\', ',')
        return main_string

    # 设置解析网页的格式/方法.

    def parse(self, response):

        # 定义一个列表，保存爬取老师的信息.
        items = []

        # 获取属性class='li_txt'的所有div容器，实际查看代码发现，页面的信息不是这个格式.

        """
        for each in response.xpath("//div[@class='li_txt']"): # root version.
        """

        for each in response.xpath("/html/body/div[10]/div/div[2]/ul/li"):
            # /html/body/div[10]/div/div[2]/ul/li[1]/div[2]/h3

            # 将我们得到的数据封装到一个 `ItcastItem` 对象
            item = MyspiderItem()

            # 消除制表符，换行符，空格符等！
            p = re.compile('\s+')

            # extract()方法返回的都是unicode字符串.
            name = each.xpath("div[2]/h2/text()").extract()
            level = each.xpath("div[2]/h2/span/text()").extract()

            Legacy = each.xpath("div[2]/h3/span[1]/text()").extract()
            experience = each.xpath("div[2]/h3/span[2]/text()").extract()
            join = each.xpath("div[3]/h3/text()").extract()
            info = each.xpath("div[3]/p/text()").extract()

            print("name:{},level{},legacy{},experience{},join{},info{}".format(
                name, level, Legacy, experience, join, info))

            # x path返回的是包含一个元素的列表.
            # new_string=re.sub(p,'',your_string)

            if name[0]:
                item['name'] = re.sub(p, '', name[0])
                item['level'] = re.sub(p, '', level[0])
                if Legacy:
                    item['Legacy'] = re.sub(p, '', Legacy[0])
                if (Legacy == None):
                    item['Legacy'] = "NULL"

                if experience:
                    item['experience'] = re.sub(p, '', experience[0])
                if(experience == None):
                    item['experience'] = "NULL"

                item['join'] = re.sub(p, '', join[0])

                # 先用正则表达式清晰制表符，换行符，空格符，后面用replace处理掉'\\'.

                item['info'] = self.clean_spaces(re.sub(p, '', info[0]))

            # 生成，迭代，下一个.
            yield item
